package com.quectel.constant.core.partybuilding;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;

/**
 * 在这里编写说明
 *
 * @author: bob
 * @email: bob.yu@quectel.com
 * @date: 2023-06-01 15:09:00
 */
public class PartyBuildingPlanConstants {

    public static final String END_OF_MONTH_VALUE ="-1";
    public static final String TASK_COMPLETE_FLAG ="completeFlag";
    public static final String LONG_TERM_TIME ="9999-12-31 23:59:59";
    public static final String LONG_TERM_DESC ="长期";
    public static final Pair<String, String> COMPLETE_TIME_KEY_PAIR = ImmutablePair.of("completeTimeStart", "completeTimeEnd");


    /**
     * 党建相关的参会人范围
     */
    @AllArgsConstructor
    public enum PlanStatus {
        /**
         * 未开始
         */
        NOT_BEGIN((byte) 1),
        /**
         * 进行中
         */
        IN_PROGRESS((byte) 2),
        /**
         * 已结束
         */
        ENDED((byte) 3),
        /**
         * 已取消
         */
        CANCELED((byte) 4),
        ;
        @Getter
        private final Byte status;
    }


    @AllArgsConstructor
    public enum PeriodType {
        /**
         * 按周
         */
        WEEK((byte) 1),
        /**
         * 按月
         */
        MONTH((byte) 2),
        /**
         * 单次
         */
        SINGLE_TIME((byte) 3),

        ;
        @Getter
        private final Byte type;
    }


    @AllArgsConstructor
    public enum TaskStatus {
        /**
         * 未完成
         */
        UNCOMPLETED((byte) 1),
        /**
         * 已完成
         */
        COMPLETED((byte) 2),
        /**
         * 已取消
         */
        CANCELED((byte) 3),

        ;
        @Getter
        private final Byte status;
    }


    @AllArgsConstructor
    public enum RemindType {
        /**
         * 及时
         */
        IN_TIME((byte) 1,0),
        /**
         * 不提醒
         */
        NOT_REMIND((byte) 2,0),
        /**
         * 提前两小时
         */
        TWO_HOURS_EARLY((byte) 3,2),

        /**
         * 提前四小时
         */
        FOUR_HOURS_EARLY((byte) 4,4),

        /**
         * 提前6小时
         */
        SIX_HOURS_EARLY((byte) 5,6),
        /**
         * 提前8小时
         */
        EIGHT_HOURS_EARLY((byte) 6,8),
        /**
         * 提前10小时
         */
        TEN_HOURS_EARLY((byte) 7,10),
        /**
         * 提前12小时
         */
        TWELVE_HOURS_EARLY((byte) 8,12),
        /**
         * 提前二十四小时
         */
        TWENTY_FOUR_HOURS_EARLY((byte) 12,24),

        ;
        @Getter
        private final Byte type;

        @Getter
        private final Integer hour;

        public static RemindType getByType(Byte type) {
            for (RemindType typeEnum : RemindType.values()) {
                if (typeEnum.getType().equals(type)) {
                    return typeEnum;
                }
            }
            return null;
        }
    }

}
